#if !defined(__APP_BUFFER)
#define __APP_BUFFER
#define APP_BUFFER_SIZE 1024
#include <pthread.h>

// 子缓冲区
typedef struct {
    char *data_ptr; //子缓冲区的指针
    int data_len; //数据长度
    int total_len;//总长度
} app_buffer_sub_t;


// 主缓冲区  : 2个子缓冲区  子缓冲区的读写标识
typedef struct {
    app_buffer_sub_t *sub_buffers[2];
    int read_index ; //负责读的子缓冲区下标
    int write_index ;//负责写的子缓冲区下标
    pthread_mutex_t read_lock;
    pthread_mutex_t swap_lock;

} app_buffer_t;




/**
 * @brief 初始化缓冲区结构体
 * @return 缓冲区结构体指针
 */
app_buffer_t *app_buffer_init();


/**
 * @brief 向缓冲区写入数据
 * @param buffer 的结构体指针
 * @param write_data 写入的数据
 * @param write_data_len 写入的数据长度
 * @return 写入成功返回0，失败返回-1
 */
int app_buffer_write(app_buffer_t *buffer, char *write_data, int write_data_len);


/**
 * @brief 从缓冲区读取数据
 * @param buffer 的结构体指针
 * @param read_buff 读取的数据
 * @param read_buff_len 读取的数据长度
 * @return 读取成功返回 实际读取的大小，失败返回-1
 */
int app_buffer_read(app_buffer_t *buffer, char *read_buff, int read_buff_len);



/**
 * @brief 销毁缓冲区结构体
 * @param buffer 缓冲区的结构体指针

 */
void app_buffer_destroy(app_buffer_t *buffer);

#endif // __APP_BUFFER
